import os
def save_to_excel(df,save_path='out',filename='index',sheet_name='Sheet1'):
    """
    将DataFrame保存到 当前目录下save_path路径的 Excel文件中
    
    Args:
        df: pandas DataFrame, 要保存的数据
        filename: str, Excel文件名（不需要路径，只需文件名）
        sheet_name: str, 工作表名称，默认为'Sheet1'
    """
# 获取当前脚本文件所在的绝对路径，并提取其目录部分
    curr_path = os.path.dirname(os.path.abspath(__file__))

# 获取当前工作目录的路径
    curr_path = os.getcwd()

    # tmp_path = os.path.join(curr_path, 'data', 'mysql_data')
    tmp_path = os.path.join(curr_path,save_path)  # 拼接保存路径和save_path参数

    # 确保目录存在
    os.makedirs(tmp_path, exist_ok=True)  # 创建目录，如果目录已存在则不报错
    
    # 构建完整文件路径
    file_path = os.path.join(tmp_path, f"{filename}.xlsx")  # 拼接完整文件路径，添加.xlsx后缀
    try:
        # 保存DataFrame到Excel
        df.to_excel(file_path, sheet_name=sheet_name, index=False)  # 将DataFrame保存为Excel文件，不保存索引
        print(f"数据已成功保存到 {file_path}")  # 打印成功信息
    except Exception as e:
        print(f"保存文件时出错: {str(e)}")  # 打印错误信息
        raise  # 抛出异常


#======================================================================================================
from tqdm import tqdm
import pandas as pd
def chunked_export(data,path,chunk_size=1000,sheet_name='Sheet1'):
    """
    将数据分块导出到Excel文件中

    Args:
        data: list, 要导出的数据
        path: str, Excel文件路径
        chunk_size: int, 每次导出的数据块大小，默认为1000
        sheet_name: str, 工作表名称，默认为'Sheet1'
    """
    with pd.ExcelWriter(path, engine='openpyxl') as writer:
        tqdm.write("正在导出数据...")
        # 计算总块数
        total_chunks = len(data) // chunk_size + (1 if len(data) % chunk_size else 0)

        with tqdm(total=total_chunks, desc="导出进度") as pbar:
# 使用循环遍历数据，按指定大小分块处理
# 通过enumerate获取索引和起始位置，实现分块处理
            for i,start in enumerate(range(0, len(data), chunk_size)):
                end=start+chunk_size
                chunk = data[start:end]

                # 将当前块写入Excel文件
                if i == 0:
                    chunk.to_excel(writer, index=False,sheet_name=sheet_name)
                else:
                    # 
                    chunk.to_excel(writer, startrow=start+1, index=False, header=False,sheet_name=sheet_name)

                # 更新进度条
                pbar.update(1)
    tqdm.write("数据导出完成！")


#======================================================================================================
 